<template>
	<!-- 修改身份证号 -->
	<view class="wm">
		<view class="form">
			<uni-forms ref="form" :modelValue="FormData" :rules="rules">
				<uni-forms-item label="身份证号:" name="idcard" labelWidth="100" required>
					<uni-easyinput type="text" v-model="FormData.idcard" placeholder="请输入身份证号" />
				</uni-forms-item>
			</uni-forms>
			<button class="savebtn" @click="save">保存</button>
			
		</view>
	</view>
</template>

<script>
	import {mapState,mapMutations} from "vuex"
	export default {
		data() {
			return {
				FormData:{
					idcard:""
				},
				//验证
				rules:{
					//对idcard进行验证
					idcard:{
						rules:[
							{
								required:true,
								errorMessage:"请输入身份证号"
							},
							{
								validateFunction:(rule,value,data,callback) => {
									var city = {
									    11: "北京",
									    12: "天津",
									    13: "河北",
									    14: "山西",
									    15: "内蒙古",
									    21: "辽宁",
									    22: "吉林",
									    23: "黑龙江 ",
									    31: "上海",
									    32: "江苏",
									    33: "浙江",
									    34: "安徽",
									    35: "福建",
									    36: "江西",
									    37: "山东",
									    41: "河南",
									    42: "湖北 ",
									    43: "湖南",
									    44: "广东",
									    45: "广西",
									    46: "海南",
									    50: "重庆",
									    51: "四川",
									    52: "贵州",
									    53: "云南",
									    54: "西藏 ",
									    61: "陕西",
									    62: "甘肃",
									    63: "青海",
									    64: "宁夏",
									    65: "新疆",
									    71: "台湾",
									    81: "香港",
									    82: "澳门",
									    91: "国外 "
									};
									var code_regular = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)?$/i;
									var tip = '';
									var pass = true;
									if (!code_regular.test(value) || (value.length != 18 && value.length != 15)) {
									    tip = '请输入有效身份证号码';
									    pass = false;
									} else if (!city[value.substr(0, 2)]) {
									    // tip = "地址编码错误";
										tip="请输入有效身份证号码"
									    pass = false;
									} else {
									    if (value.length == 18) {
									        value = value.split('');
									        // ∑(ai×Wi)(mod 11)
									        // 加权因子
									        var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // wi
									        // 校验位
									        var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]; // mod(sum, 11)
									        var sum = 0;
									        var ai = 0;
									        var wi = 0;
									        for (var i = 0; i < 17; i++) {
									            ai = value[i];
									            wi = factor[i];
									            sum += ai * wi;
									        }
									        if (parity[sum % 11] != value[17]) {
									            // tip = '校验位错误';
												tip="请输入有效身份证号码"
									            pass = false;
									        }
									    }
									}
									if (!pass) {
									    callback(tip);
									}
									return pass;
								}
							}
						]
					}
				}
			};
		},
		computed:{
			...mapState("m_user",["userInfo","id"])
		},
		onLoad(){
			this.init_idcard()
		},
		onReady(){
				this.$refs.form.setRules(this.rules)
		},
		methods:{
			...mapMutations("m_user",['updateUserInfo']),
			save(){
				uni.showLoading()
				this.$refs.form.validate().then(async (res) => {
					uni.hideLoading()
					//组织要修改的数据
					let $query = {
						"token":this.userInfo.token,
						"id":this.userInfo.id,
						"idcard":res.idcard
					}
					//请求数据接口修改数据
					const {data:result} = await uni.$http.post("Users/updateUserInfo",$query)
					if(result.meta.status == 0) return uni.$showMsg(result.meta.msg);
					result.data['token'] = this.userInfo.token
					//修改成功之后更新storage中的用户信息
					this.updateUserInfo(result.data);
					uni.$showMsg(result.meta.msg);
					//返回管理页面
					setTimeout(()=>{
						uni.navigateBack({
							url:"/subpkg/manage/manage"
						})
					},1500);
				}).catch(err => {
					uni.hideLoading()
					uni.$showMsg(err[0].errorMessage);
				})
			},
			/**
			 * 初始化
			 */
			init_idcard(){
				this.FormData.idcard = this.userInfo.idcard
			},
			/**
			 * 
			 */
		}
			
	}
</script>

<style lang="scss">
.form{
	background-color:#fff;
	margin-top:30rpx;
	padding:20rpx;
	border-radius: 15rpx;
}
.savebtn{
	background:linear-gradient(to  right,#feb27a,#ff7d5d);
	color:#fff;
	height: 35px;
	border:0;
	line-height: 35px;
	&:active{
		background:linear-gradient(to  right,#eba470,#e97055);
	}
}
</style>
